Release 10.1A: OpenEdge Development:
Progress 4GL Reference


CALL object handle

A handle to a CALL object, which lets you do the following dynamically:

Syntax

call-object-handle [ :attribute | :method ] 

call-object-handle

A handle to a CALL object.

attribute

An attribute of the CALL object.

method

A method of the CALL object. The methods let you set parameters, reset attributes to their default values, and invoke the CALL object.

Attributes

   

Methods

 

Examples

The following fragment dynamically invokes an external procedure nonpersistently:

DEFINE VARIABLE hCall AS HANDLE. 
CREATE CALL hCall. 
/*invoke hello.p nonpersistently */ 
hCall:CALL-NAME = "hello.p". 
hCall:NUM-PARAMETERS = 1. 
hCall:SET-PARAMETER( 1, "CHARACTER", "INPUT", "HELLO WORLD"). 
hCall:INVOKE. 
/* clean up */ 
DELETE OBJECT hCall. 

The following fragment dynamically invokes an external procedure persistently, then dynamically invokes one of its internal procedures:

DEFINE VARIABLE hCall AS HANDLE. 
CREATE CALL hCall. 
/*invoke persis.p persistently */ 
hCall:CALL-NAME = "persis.p". 
hCall:PERSISTENT = true. 
HCall:INVOKE. 
   /* IN-HANDLE is automatically set
      to the handle of the persistent procedure
   */ 
/* invoke internal-persis-proc in persis.p */ 
HCall:CALL-NAME = "internal-persis-proc". 
hCall:NUM-PARAMETERS = 1. 
hCall:SET-PARAMETER( 1, "INTEGER", "INPUT", 333). 
hCall:INVOKE. 
/* clean up */ 
DELETE PROCEDURE hCall:IN-HANDLE. 
DELETE OBJECT hCall. 

The following fragment uses a single CALL object handle multiple times:

DEFINE VARIABLE hCall AS HANDLE. 
  
CREATE CALL hCall. 
/*invoke hello.p nonpersistently */ 
hCall:CALL-NAME = "hello.p". 
hCall:NUM-PARAMETERS = 1. 
hCall:SET-PARAMETER( 1, "CHARACTER", "INPUT", "HELLO WORLD"). 
hCall:INVOKE. 
/* reset the CALL object handle */ 
hCall:CLEAR. 
/*invoke persis.p persistently */ 
hCall:CALL-NAME = "persis.p". 
hCall:PERSISTENT = true. 
HCall:INVOKE.   
   /* IN-HANDLE is automatically set
      to the handle of the persistent procedure
   */
                                          
/* invoke internal-persis-proc in persis.p 
HCall:CALL-NAME = "internal-persis-proc". 
hCall:NUM-PARAMETERS = 1. 
hCall:SET-PARAMETER( 1, "INTEGER", "INPUT", 333). 
hCall:INVOKE. 
/* clean up */ 
DELETE PROCEDURE hCall:IN-HANDLE. 
DELETE OBJECT hCall. 

The following fragment gets an attribute:

/* get title of frame */ 
hCall:IN-HANDLE = myframe_handle. 
HCALL:CALL-TYPE = GET-ATTR-CALL-TYPE. 
hCall:CALL-NAME = "TITLE". 
hCall:INVOKE. 
Mytitle = hCall:RETURN-VALUE. 

The following fragment sets an attribute:

/* set SESSION:NUMERIC-FORMAT to "european" */ 
hCall:IN-HANDLE = "session". 
HCALL:CALL-TYPE = SET-ATTR-CALL-TYPE. 
hCall:CALL-NAME = "numeric-format". 
hCall:NUM-PARAMETERS = 1. 
hCall:SET-PARAMETER( 1, "CHAR", "INPUT", "european"). 
hCall:INVOKE. 

The following fragment drives the INVOKE() from a TEMP-TABLE:

/*suppose hRuntt is a temp-table that has one record with the following fields: 
   parm_1 
   parm_2 
   ... 
   parm_n 
   run-name 
   nparms 
   datatypes, extent nparms 
   iomodes, extent nparms 
*/ 
DEFINE INPUT PARAMETER TABLE-HANDLE hRuntt. 
DEFINE VARIABLE hDtypes  AS HANDLE. 
DEFINE VARIABLE hIOmodes AS HANDLE. 
DEFINE VARIABLE hCall    AS HANDLE. 
DEFINE VARIABLE i        AS INTEGER. 
hDtypes  = hRuntt:BUFFER-FIELD("datatypes"). 
hIOmodes = hRuntt:BUFFER-FIELD("iOmodes"). 
hRuntt:FIND-FIRST. 
CREATE CALL hCall. 
hCall:CALL-NAME = hRuntt:BUFFER-FIELD("run-name"):BUFFER-VALUE. 
hCall:NUM-PARAMETERS = hRuntt:BUFFER-FIELD("nparms"):BUFFER-VALUE. 
FOR i = 1 to hCall:NUM-PARAMETERS. 
    hCall:SET-PARAMETER( i, 
			     hDtypes:BUFFER-VALUE(i), 
			     hIOmodes:BUFFER-VALUE(i), 
			     hRuntt:BUFFER-FIELD(i):BUFFER-VALUE). 
END. 
hCall:INVOKE. 
DELETE OBJECT hCall. 
/* if there are output parms,
   get the values from hRuntt:BUFFER-FIELD(i)
*/ 

Notes

See also

RUN statement


Copyright © 2005 Progress Software Corporation
www.progress.com
Voice: (781) 280-4000
Fax: (781) 280-4095